package thread;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 刘远望
 * Date: 2025-06-04
 * Time: 19:27
 */
//原子类 AtomicInteger 实现原子操作
//原子类是一种线程安全的计数器类，它提供了原子操作，包括递增、递减、设置和获取值等。
// AtomicInteger 类提供了以下方法：
// incrementAndGet()：原子地将当前值加 1，并返回新值。
// getAndIncrement()：原子地将当前值加 1，并返回旧值。
// addAndGet(int delta)：原子地将当前值加上指定的增量 delta，并返回新值。
// get()：获取当前值。
// set(int newValue)：设置当前值。
// getAndAdd(int delta)：原子地将当前值加上指定的增量 delta，并返回旧值。
// compareAndSet(int expect, int update)：如果当前值等于预期值 expect，则原子地将当前值设置为 update，并返回 true；否则，返回 false。
public class Demo38 {

    private static AtomicInteger count = new AtomicInteger(0);//原子类基于CAS实现  0是初始值

    public static void main(String[] args) {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                //count.incrementAndGet();//这个相当于++count
                count.getAndIncrement();//这个相当于count++
                //count.addAndGet(5);//这个相当于count+=5
                /**
                 * 原子类不涉及加锁 就能省下锁的开销
                 */
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                count.incrementAndGet();
            }
        });

        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(count.get());//输出最终结果为100000
    }
}
